package talayaco.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public interface ProveedorDAO {

	/**
	 * Metodo que inserta un nuevo proveedor en la base de datos
	 * 
	 * @return datosProveedor Mapa con los datos del proveedor a insertar
	 * @throws Exception
	 */
	public void insertProveedor(Map<String, String> datosProveedor)
			throws Exception;

	/**
	 * Elimina un proveedor de la base de datos
	 * 
	 * @return nombreProveedor Nombre del proveedor
	 * @throws Exception
	 */
	public void deleteProveedor(String nombreProveedor) throws Exception;

	/**
	 * Obtiene un proveedor en base a su id
	 * 
	 * @param nombreProveedor
	 *            Nombre del proveedor
	 * @return Mapa con los datos del proveedor
	 * @throws Exception
	 */
	public Map<String, String> getProveedorByNombre(String nombreProveedor)
			throws Exception;

	/**
	 * Obtiene la lista de proveedores
	 * 
	 * @return Lista de mapas con los datos de los proveedores
	 * @throws Exception
	 */
	public List<Map<String, String>> getProveedores(String tipoProveedor)
			throws Exception;

	/**
	 * Metodo que verifica si un proveedor ya existe en la base de datos.
	 * 
	 * @param nombreProveedor
	 *            Nombre del proveedor
	 * @return 1 si encontro el proveedor, 0 caso contrario
	 * @throws Exception
	 */
	public String existeProveedor(String nombreProveedor) throws Exception;

	/**
	 * Actualiza los datos del proveedor.
	 * 
	 * @param datosProveedor
	 *            Mapa con los datos del proveedor a actualizar
	 * @throws Exception
	 */
	public void updateProveedor(Map<String, String> datosProveedor)
			throws Exception;

	/**
	 * Obtiene el id de un proveedor en base a su nombre
	 * 
	 * @param nombre
	 *            del proveedor
	 * @return identificador proveedor
	 * @throws SQLException
	 */
	public Long getIdProveedorByNombre(String nombre) throws SQLException;

	/**
	 * Metodo que valida que un proveedor no posea movimientos asociados
	 * 
	 * @param nombreProveedor
	 *            Nombre proveedor
	 * @return cantidad de movimientos
	 * @throws Exception
	 */
	Long validarMovimientosProveedor(String nombreProveedor) throws Exception;

}
